0%

Yong-Ming Wei

The original author of MiniGUI, a full-stack engineer and an entrepreneur.

minigui

A mature cross-platform windowing and GUI system for embedded systems and smart IoT devices http://www.minigui.com

魏永明: MiniGUI的涅槃重生之路

2017-09-01 Linuxer
本文背景

MiniGUI是最负盛名的开源Linux图形用户界面支持系统之一。本文是魏永明老师于公元2017年9月1日最新原创的讨论MiniGUI的涅槃重生之路的文章。

作者简介

魏永明,获清华大学工学学士、硕士学位。其主持的 MiniGUI 项目,是早期国内最知名的几大开源软件项目之一,曾广泛应用于功能手机、数码相框等嵌入式产品中。魏永明于2002年创立北京飞漫软件有限公司,成功实践了围绕开源软件的双许可证商业模式;于2015年10月联合创办北京玖柏图技术股份有限公司并担任 CEO。魏永明为 Linux 及开源软件在中国的普及和应用做了大量工作,翻译或编著若干技术著作(《Linux 实用教程》、《Linux 设备驱动程序》等);2013年,鉴于他在开源软件领域做出的突出贡献,被“中国开源软件推进联盟”评选为“开源软件杰出贡献人物”。

上周去深圳出差,约了几个飞漫的前同事一起吃饭喝酒,其中高总目前供职于深圳一家数控系统开发厂商。2000年开始,高总就在 TCL 和创维力推 Linux + MiniGUI 的智能电视方案,甚至还基于 MiniGUI 开发了自己的浏览器。然而大家都知道,智能电视这一类产品在十年之后(2010年)才获得了市场的认同并得到了大的发展和普及,其中 Android 从技术上保证了智能电视这类产品的成功,高总力推的方案在当时得不到产品部门的认同,其实无关技术,而是市场还不成熟。大家谈起这些往事,各个唏嘘不已。

MiniGUI 作为生长于国内土壤的一款开源软件,1999年发布了第一个版本,2003年左右成熟起来,并在嵌入式产品类型蓬勃发展的 2000年到2010年之间获得了大量的应用,广泛应用于工业控制系统、功能手机、数码相框等类型的产品中,其中尤以华为的数码相框、联芯的功能手机方案、RDA 的功能手机方案为代表。本人于 2002 年成立了飞漫软件,尝试利用开源和商业并举的方式(双许可证模式)运营 MiniGUI 及其产品,获得了一定意义上的成功,期间也有很多经验教训。有关详情,大家可以在网上搜索本人在 2009 年发表的《MiniGUI 十年回顾》这篇文章:

http://www.fmsoft.cn/zhcn/about/blog/minigui/

自上面这篇文章发布以来,又有八年时间过去了,斗转星移,AI 成为下一个高科技领域的竞争焦点。在操作系统及基础软件领域,Android 已经占据了除苹果之外的所有智能手机的市场份额,但并没有完全替代所有基于 Linux 的智能设备以及其他更多的嵌入式实时系统,仍然有很多客户在使用 MiniGUI 开发各类智能设备;另一方面,MiniGUI 当年的竞争对手 Qt 几易其主,但仍然在顽强生存着。当年时兴的“嵌入式系统”字眼,已被“物联网”取代,华为的 liteOS以及其他本土开发人员发展起来的 RT-Thread、SylixOS 等 RTOS(实时操作系统)产品,获得了政府部门甚至资本市场的支持,从而获得了新的发展契机。

作为 MiniGUI 的原创者,本人对这款软件的感情自不必说。但是,除了我本人之外,还有更多的飞漫软件同事(包括高总这些 MiniGUI 的早期用户及开发者)为 MiniGUI 的发展倾注了诸多心血。

万目前供职于深圳一家明星企业,是当年飞漫深圳研发团队的负责人,侯是架构师,现在珠海创业。2007年,飞漫深圳团队在万和侯的领导下,开始负责 MiniGUI 的维护工作。在2009年左右,这个团队为 MiniGUI 开发了一整套的动画支持框架和界面开发技术。若没有 Android 的横空出世,这些技术本可以应用于功能手机的升级改造中,为功能手机提供优秀的 UI/UX 解决方案。但 Android 的开源免费,Google 的大力推广,却让这些技术丧失了应用和发展的机会。

董目前供职于小米,是 miniStudio 产品的主要开发者。miniStudio 是一个基于 Eclipse 的集成开发环境,提供了“所见即所得”的 GUI 界面编辑工具。为了实现GUI 应用的编程便利性,董改造了 MiniGUI 控件的编程框架,开发了 mGNCS(新控件集)组件,并且引入外观渲染器这样一种高级的 UI 定制体系和方案,领导团队开发了 miniStudio 产品。时隔多年的今天,当我从服务器找到 miniStudio 1.0.8 for Windows 版本,安装到电脑上并运行时,我仍然惊讶于这款软件提供的可视化编程能力,就算在今天,也是难能可贵的!但飞漫软件并没有花精力推广和发展 miniStudio,也没有基于 miniStudio 发展出可以良性循环的商业模式出来,不禁令人扼腕叹息。

mDolphin 是基于 WebKit的浏览器产品,张、吕为前后两名主力开发人员,该产品的开发历时多年持续演进,甚至成功应用于联芯的功能手机方案当中。mDolphin 是 MiniGUI 上的一款典型的大型应用软件,除了其本身的应用价值之外,也有力地证明了 MiniGUI 产品的成熟性。目前,张作为技术专家供职于阿里巴巴,吕在互联网领域创业。

上面提到的这些曾供职于飞漫软件的前同事,为 MiniGUI 的发展付出了自己的青春年华,他们的技术能力也得到了极大的提升和锻炼。不论他们后来从事什么行业,或打工或创业,在飞漫软件围绕 MiniGUI 所做的开发工作,仍然是其履历中重要的一笔。除了他们之外,在长达十多年的发展历程中,飞漫软件前后为业界培养了近百名优秀的高级软件工程师,限于篇幅不能一一列举。他们有的供职于腾讯、阿里等大型互联网公司的关键技术岗位,有的在移动互联网等领域创业,他们围绕着 MiniGUI 所做的开发和维护工作,让他们受益一生。

上周去深圳,当万在其供职的企业熟练地向他当前的同事演示和讲述 MiniGUI 之上的动画框架和相关技术时,我才深切感受到,高、万、侯、董以及其他为 MiniGUI 的发展倾注过精力的开发人员对 MiniGUI 的感情并不比我差多少。

和高总他们吃饭的时候,高总提到 MiniGUI 仍然有很旺盛的需求,仍然可以继续发展。其实就这个问题,几乎每次到深圳和高、侯他们吃饭喝酒,都会拿出来争论一番。他们认为 MiniGUI 仍然有旺盛的市场需求,应该继续发展,就这么丢下不管实在可惜;我则认为每个产品都有自己的生命周期,MiniGUI 从 1999 年到现在都已经十多年了,生命周期差不多到头了。

本人从 2010 年开始,领导原飞漫软件的团队开发过 Android 上的工具类 App(领航桌面、锁屏等),定制过智能电视方案,现在则另起炉灶在智能硬件和移动互联网领域创业。大概从2012 年开始,MiniGUI 的开发处于停滞状态,除了将万、侯他们开发的最新版本以及 mDolphin 开源发布之外,几乎没有再做过大的更新。但从2015年开始,MiniGUI 的需求又变得旺盛起来,每年都会有客户主动找飞漫软件获得 MiniGUI 的商业授权。

折腾多年以后,回过头来反思 MiniGUI 和飞漫软件走过的路,我之所以认为 MiniGUI 的生命周期已到,大致是由于飞漫软件未能取得心目中的成功。换句话说,我把技术和生意搞混淆了。一个生意可能无法持续按照单一的模式去运营,但技术却不会轻易过时。

举个典型的例子 MySQL。MySQL的早期运营公司使用双许可证模式,获得了一定程度上的商业成功,后来被 Oracle 收购,双许可证模式基本已经完成了它的历史使命,但 MySQL 的应用却随着互联网、移动互联网、云服务的发展而越发普及,就算后来出现了诸多 NoSQL 数据库,但 MySQL 仍然展现着其旺盛的生命力。

再比如 OpenGL 这类规范或者基础设施,发展了几十年,从未见过其过时。Apache、X Window 等等技术或开项目,几乎是开源世界的常青树,Linux 内核就更不用说了。

显然,只要是有市场需求和用户基础的基础软件,持续发展才是其主旋律;容易过时的是生意,而不是技术本身。

作为一款开源软件作品,MiniGUI 在技术上是成熟的,成功的;失败的只是生意:飞漫软件并没有因为 MiniGUI 而获得大的发展。我相信抛开生意,仍然有可能找到一种方法可以让 MiniGUI 继续发展下去。

就如何发展 MiniGUI 的问题,最近集中思考了几天。后来在宋宝华老师(知名 Linux 内核专家)的微信群里,宋老师找我约稿,我才确定了本文的题目:《MiniGUI 的涅槃重生之路》。

先谈最容易谈的:技术方面

技术方面,在围绕 MiniGUI 的软件栈当中,应重点做好如下三方面的工作:

在底层,为适配最新的硬件和 Linux 内核技术(主要指 GPU、OpenGL ES、Open VG 和 Direct Rendering Manager),做一些相关的工作。MiniGUI 3.0 当中,以窗口为单位,MiniGUI 支持虚拟缓冲区渲染,以进程为单位,通过使用特定的图形引擎,可以将单个进程显示在单独的显示平面(Surface)上。在这两点基础上结合 GPU 渲染,就可以实现 Android、iOS 等智能手机操作系统的 UI 效果了。

为方便MiniGUI应用的开发,需要发展集成开发环境,可以探索更高级的编程接口封装,甚至使用脚本语言来编写 MiniGUI 应用程序甚至一般的嵌入式应用程序。董在飞漫工作期间发展的 mGNCS 和 miniStudio 是一个非常好的尝试,可以作为继续发展的基础。但由于这几年移动互联网的大力发展,导致 C/C++ 开发者越来越稀缺,如果新的编程框架仍然使用 C/C++ 作为编程语言,则会对产品或技术的推广造成很大的影响。作为工具,需要考虑降低开发者的入门门槛。另外,新的编程接口封装,不应该仅仅限于 GUI 编程,而应该在一个统一的应用开发模型下,将嵌入式、物联网设备开发的其他部分也有机整合起来。这方面,近几年发展起来的服务器端 JavaScript 框架 Node.js 是一个可以参考的成功案例。当然,嵌入式或者物联网设备的开发有资源受限的问题,在开发效率和程序性能方面需要作出一些权衡,这有难度,但这也许就是可以创新的地方。

和其他开源项目合作,将 MiniGUI 作为其原生支持选项,比如 WebKit。此举可一方面发展 MiniGUI 之上的关键应用软件,另一方面可以扩大 MiniGUI 的生态体系,得到更多人的关注。

以上技术方面的未尽事宜,只要有开发者,假以时日,都是可以做出来的。但最麻烦的是谁来养这些开发者,或者,说白了钱从哪儿来?

如果是生意,该如何做?

这么多年靠技术创业,我发现单纯靠技术做生意是最难的,要难过任何一种传统的生意模式,比如开饭馆,做代理等等。大家都知道,在中国市场,软件的价值往往会被低估,通过卖软件副本来赚钱的时代也已经一去不复返,所以中国这篇土壤上从来没有孕育出微软这样的巨头。在这样的一个大环境下,飞漫之所以能够依靠 MiniGUI 这样一个单一业务坚持十多年,在 MiniGUI 停止更新后还能有一些收入,可以说完全是因为运气。但任何事情都有双面性,中国企业在互联网商业模式方面的探索,促进了腾讯、阿里等企业的飞速发展。所以,这里我可以探讨一个假设:假如能够重来,我会选择什么样的模式来做 MiniGUI 这个生意?

首先,我不会天真地认为 MiniGUI 这个生意可以做到每年上亿的营业收入,我认为一千万元的年收入规模对这样一个软件来讲就已经很好了。

其次,我认为 2010 年之前飞漫软件采取的双许可证商业模式是正确的,是当时条件下的正确选择,为飞漫软件的进一步发展积累了资金。但在 2010 年或更早,应该作出商业模式上的调整(当然,前提是本人不认为 MiniGUI 的生命周期已结束,这是眼界的局限性问题)。

最后,围绕 MinIGUI 的生意模式,正确的做法应该是:利用开源软件优势,持续扩大用户(开发者)群体,维持一个小规模(10到15人左右)的软件公司,在确保公司可以长期生存的情况下,静候市场发生变化,寻找爆发的机会或者被收购。

就我目前的状况,我的精力不允许再组建一个完整的团队来运营MiniGUI,将其作为一个生意来做。但在这里,我可以给出一个供参考的商业模式,当然,这个商业模式亦可供 RT-Thread、SylixOS 等基础软件创业团队参考:

使用 Apache许可证发布基础软件(比如操作系统、函数库等),不要再使用 GPL/LGPL 等条款发布。这样可以迅速获得最大程度的商业应用,扩大市场占有率。要知道,假如 Android 使用 GPL 许可证发布,是绝对不可能获得如此大的成功的。

提供收费的开发工具,比如 MiniGUI 的集成开发环境miniStudio,并按开发人员数量及使用年限提供许可。开源这类工具软件的意义不大,但这类工具软件运行在桌面电脑上,所以可以通过云端来控制其许可证,还可以通过云端来分发一些收费的模块或者提供技术支持服务。这样的模式下,工具软件的销售成本就会变得非常低,用户甚至可以在网页上实现在线下单,并通过邮件获得许可证。

假如采取以上的商业模式,通过适当推广,每年在全球范围内发展和保持 500 名付费开发者,则基本上可以养活一个 15人规模的小软件公司。假如推广得力,达到一千万元的年销售规模也是可能的。

MiniGUI 十年回顾

August 11, 2012 at 7:00 PM
【作者】MiniGUI 及飞漫软件创始人魏永明。

【重编注】这篇文章,是为纪念 MiniGUI 发布 10 年(2009年)而写的。从 2010 年到现在的 2011 年中期,这个世界的变化很快。MiniGUI和飞漫软件从水平市场逐渐集中精力于手机这个垂直市场,而 2007 年 Google 发布的 Android系统,如秋分扫落叶般发展迅速,看起来将在 2012 年全面占据中低端(千元)智能机市场。MiniGUI这个产品的生命周期,也似乎要走到尽头了——起码在手机市场,大概也只能在功能手机这个领域存活三到五年左右的时间。但不管如何,大家了解下MiniGUI 这个嵌入式系统、移动终端中关键系统软件的发展历程,应该还算是有些用的吧。

一、引言
MiniGUI 的开发起始于 1998 年底,第一个版本大致发布于 1999 年 6月。从第一个版本的面世到现在,已经过整整十年时间。在这十年当中,经过许多客户的使用和验证、经过飞漫软件多年的持续研发投入和精心打造,今天的MiniGUI,已经成为了性能优良、功能丰富的、跨操作系统的嵌入式窗口系统,用户遍布全球各地,为中国的嵌入式系统软件树立了一面鲜活的旗帜。在这十年中,MiniGUI的发展大致经历了三个阶段:

1999年到2002年:纯自由软件阶段。在这个阶段,MiniGUI 以纯粹的自由软件形式开发和发布,这时的MiniGUI 还很不成熟。
2002年到2005年:围绕开源的 MiniGUI,通过定制开发、技术支持、培训等服务发展MiniGUI。在这个阶段,飞漫软件通过为客户提供定制开发、技术支持服务等业务,逐步将 MiniGUI打造成了一个成熟的嵌入式系统软件。
2005年到2009年:以销售 MiniGUI 增值版产品、软件使用授权的模式持续推广和开发MiniGUI。在这个阶段,飞漫软件通过销售 MiniGUI 软件产品获取收入并持续发展 MiniGUI,并开发了基于 MiniGUI的浏览器(mDolphin)、J2SE 方案(mPeer)、mStudio 等相关及配套软件产品,形成了围绕 MiniGUI的一个完善的软件平台。
MiniGUI,作为一个完全自主开发的系统软件,走过了十年的历程,生命力如此之强,在当今浮躁的大环境下实属难得。那么,MiniGUI在这十年中走过了哪些路程?发展 MiniGUI 又有哪些现实的价值?本文将详细为大家阐述 MiniGUI 的十年历程以及执着发展MiniGUI 的现实价值。

二、MiniGUI 的最初发展
MiniGUI 的起源,要从 1998 年算起。

那时,自由软件的思想刚刚从国外传入到中国大陆,大陆也有许多人开始学习和关注Linux。在此之前,笔者还沉浸在微软为我们营造的软件世界中。那时,笔者不知道 Linux 是一个什么东西,而 Windows的封闭、臃肿却让我有了看看微软之外世界的想法。在这样的背景下,我有了尝试其他操作系统的冲动,而我当时所从事的研究课题也迫使我作出一个选择――是Windows 还是 Linux。

当时,我在清华大学某实验室工作。该实验室正要开发一套工业控制系统――用于新型机床的数控系统。以前,这样的控制系统一般都建立在DOS 操作系统之上,因为 DOS 最为简单,并且能够直接控制中断和 I/O,从而可以获得非常高的实时响应能力。但 DOS 是一个16 位操作,不能充分发挥基于 32 位处理器的新硬件平台的功能,因此,我们首先要选择一个新的 32位操作系统。由于微软系列产品在大家心中“神圣不可侵犯”的地位,我所在研究小组的领导倾向于使用 Windows NT作为操作系统开发这个数控系统。现在想起来真是有些后怕!如果当时真的选择了 WindowsNT,那这个数控系统简直就是无法完成的――因为它需要 2ms 的实时响应能力!WindowsNT,这个号称“新技术”的操作系统,实际根本不是一个硬实时操作系统,而且其庞大累赘的体系结构,也无法真正应用于工业现场环境使用。

在经过很长时间的调研之后,我们对 Linux 有了一定的认识。其中最为关键的是,Linux 已经有了一个实时的内核补丁,即RT-Linux。利用 RT-Linux,可以直接处理中断,从而能够让一个普通的 Linux系统成为一个健壮的硬实时系统。经过长时间的游说,实验室终于决定选择 Linux作为数控系统的操作系统平台。但紧接着出现了另一个问题――GUI 怎么办。因为 Linux 上的 X Window也不可避免地庞大和累赘。我们曾经做过一个试验,如果在 RT-Linux 上启动 XWindow,则会导致严重的关键中断延迟。而且,当时的 X Window 汉化技术也不很成熟。所以,建立一个轻型的 GUI系统,并且具有良好的中文支持,是首先要解决的问题。

但实际上,这已经不是什么问题了。那时,我已经具备了一定的图形用户界面系统开发经验。早在 1995 年,就已经开发完成了DOS 上一个简单的图形用户界面系统。我将她称为 MiniGUI。在 Linux 上的 SVGALib函数库的帮助下,建立一个类似的图形用户界面支持系统的确是一项并不困难的工作。经过笔者大概半年没日没夜的编码,MiniGUI最初的版本(0.2.0)在 1999 年 6 月遵循 GPL 许可证发布,并在 SMTH BBS 的 FreeDevelop版面做了对 MiniGUI 的介绍。这样,一个最初仅仅因为解决 Linux 上中文化图形界面问题而开发的 MiniGUI就这样问世了。

1999 年时,大陆已经有许多非正式组织在倡导 Linux操作系统,也已经出现了一些由中国人主持的自由软件项目,比如由章文嵩主持的 Linux Virtual Server 项目、由苏哲主持的Smart Boot Manager 项目等等。后来,包括 MiniGUI在内的这三个自由软件项目,被公认为三大由中国人主持和开发的自由软件项目。

作为笔者的个人兴趣,从 1999 年到 2002 年期间,MiniGUI始终作为一个纯粹的自由软件项目而持续开发和发布,最终发展到了 1.2.0 版本。在这一阶段,还有众多组织和企业支持了 MiniGUI的开发:

由清华大学学生何小波、陶品等发起和组织的AKA 组织。这个组织为 MiniGUI 早期的发布、宣传做了大量的工作。
联想公司。联想在 2000年期间,也尝试开发自己的发行版(Happy Linux),并采用 MiniGUI作为其安装程序。笔者以个人身份参与了该项目的开发,经过该项目的开发,MiniGUI形成了一个较为完整的图形用户界面支持系统,第一次体现了其商业价值。
蓝点(深圳)软件技术有限公司。该公司是早期三大中文Linux 发行版之一 Bluepoint Linux的开发商。2000年5月到2001年5月,笔者曾在该公司的北京研发中心工作,并尝试将 MiniGUI 用于深圳元征公司的汽车检测用PDA 设备中。这期间,MiniGUI 得到了一些新的发展。
北京中科红旗软件技术有限公司。该公司是 RedFlagLinux 发行版的开发商。笔者也曾在该公司的嵌入式事业部工作。在该公司工作期间(2001年5月到2002年8月),尝试将MiniGUI 应用于单兵作战手持设备以及信息终端中。在这期间,MiniGUI 得到了进一步的发展。
IBMdeveloperWorks 网站。2001年到2002年期间,通过担任该网站的专栏作家,笔者撰写了一批阐述 MiniGUI设计思想、MiniGUI 使用和编程的文章,为推广 MiniGUI 起到了推波助澜的作用。
梅特勒托利多(常州)称重仪表公司。该公司是笔者所知、除笔者自己之外,第一个将MiniGUI 应用于商用嵌入式设备中的企业。这个企业也是后来飞漫软件的第一个客户。
虽然作为一个自由软件项目,MiniGUI可以仅凭个人兴趣以及一些为数不多的用户的鼓励和支持慢慢发展,但因为国内的软件基础薄弱,无法在短时间内形成适合自由软件发展的土壤,因此,笔者决定创立一个商业化公司,通过商业化机构的运作,促进MiniGUI 的快速发展。这样,就诞生了北京飞漫软件技术有限公司。

三、MiniGUI 的商业化发展历程
2002 年 9月,笔者创立了北京飞漫软件技术有限公司,尝试自由软件的商业化运作模式。飞漫软件成立之初,我们的主要业务模型是通过定制服务、技术支持、培训等业务来获得收入,MiniGUI仍然作为一个自由软件项目而发展,只是其维护者从个人转向了商业机构。

飞漫软件从成立到2005年底持续开发MiniGUI,并发布了若干版本:于 2003 年 5 月发布了 MiniGUIV1.2.6 版本;于 2003 年 9 月发布了 MiniGUI V1.3.0 版本;2003 年 10 月,MiniGUI完成了到 uClinux 和 eCos 操作系统的移植,并发布了 MiniGUI V1.3.3 版本。至此,MiniGUI成为一个跨平台的嵌入式图形用户界面支持系统。
2004 年 8 月,华为选择 MiniGUI作为平台软件产品,用于机顶盒、手持终端等产品领域。在此之前,飞漫软件主要的业务,是通过为客户提供基于 MiniGUI的定制开发业务,以及技术支持服务来获得收入,而华为采购 MiniGUI 并支付软件授权使用费用,为快速发展 MiniGUI提供了另外一条商业化道路。这样,从 2005年开始,飞漫软件开始了一次重要的转型,即以软件产品的销售、软件使用授权作为主要的业务而进行发展,并推出了 MiniGUI增值版产品。飞漫软件也走上了一条较为快速发展的道路,从 2005 年到 2007 年,飞漫软件的年销售额增长率保持在 40%以上。

2005 年 1 月,TD-SCDMA 标准的主要制定者(大唐移动,现在的联芯科技)采用 MiniGUI 作为商用TD-SCDMA 手机的 MMI 方案;2005年 7 月,基于 VxWorks Simulator 的 MiniGUI演示开发环境顺利完成,该环境的成功搭建进一步加深了飞漫软件与美国风河间的合作。

2006 年 1 月,正式发布 MiniGUI 的相关组件产品 mGp V1.0、mGi V1.0 以及 mG3dV1.0;2006 年 5 月,飞漫软件成为美国风河系统公司全球合作伙伴,为 VxWorks 提供全面的图形解决方案。

2006 年 12 月,在香港举办的世界电信展上,大唐移动(现联芯科技)隆重推出采用 MiniGUI 和 Fhas应用开发平台作为图形显示系统和终端应用开发平台的 TD-SCDMA 3G 手机终端软件标准平台 Arena。经过多年的发展,截止2009 年 10 月,中国移动 3G 手机(即 TD-SCDMA 手机)市场中,有超过 50% 的 3G手机使用MiniGUI作为其图形用户界面。在 2009 年上半年,由中国移动深度定制的四款 3G 手机中,有两款手机采用MiniGUI;这两款手机是:中兴通讯的U210 以及宇龙酷派的 F69。除此之外,还有早期试商用阶段的中兴通信 U85、海信 T68等型号的 TD 手机。目前,采用 MiniGUI 开发的手机类产品已经有十几款型号。

2008 年 10 月,经过一年多的开发,飞漫软件发布了 MiniGUI V3.0。最新的 MiniGUI V3.0 版本在MiniGUI V2.0/1.6 的基础上,提供了众多高级功能特性,将帮助用户开发具有更好用户体验的嵌入式产品。MiniGUI 3.0中蕴含有众多由飞漫软件研发团队首创的技术(外观渲染器、界面特效等),标志着 MiniGUI3.0从模仿、跟随他人走向了自主创新阶段。与此同时,飞漫软件基于 MiniGUI开发的其他两项技术和产品:mDolphin(嵌入式浏览器)、mPeer(嵌入式 J2SE解决方案)也得到了诸多重要客户的认可并使用。

2009年初,全球500强企业思科系统(中国)有限公司和飞漫达成合作,在网络电视领域展开广泛深入的合作,思科系统(中国)有限公司选用飞漫软件的全线系列产品作为其网络电视方案的基础软件,包括MiniGUI、mDolphin浏览器、mPeerJ2SE 解决方案。

2009 年 10 月,在中华人民共和国成立 60 周年之际,飞漫软件推出了 MiniGUI 的配套开发工具产品mStudio。至此,围绕 MiniGUI 的关键应用、开发工具等就相对完整了。

2009年,经过多年的实践,飞漫软件终于找到了一条符合市场需求的发展道路,并稳步走上了快速发展道路。虽然 2008年底、2009年初,和众多中小企业一样,飞漫软件也受到了全球性金融危机的影响,但 2009 年飞漫软件的预期销售业绩将同比增长 80%或者更高。这一成绩的取得,证明了飞漫软件所选道路的正确性,也标志着飞漫软件的发展已经走向了快车道。

值得一提的是,直到今天,飞漫软件仍然以自由软件的形式发布 MiniGUI 的某些版本。其中包括广泛使用的 MiniGUIV1.3.3,最新发布的 MiniGUI-GPL V1.6.10 等。同时,飞漫软件还积极以开放源码的形式发布了诸多软件,如mGDesktop、mGallery、mGIS 等等。飞漫软件也已成为国内为开源社区贡献代码最多的本土企业。

四、执着发展 MiniGUI 技术的现实意义
尽管 MiniGUI 的发展并不是一帆风顺的,尽管 MiniGUI从纯自由软件走向商业化运作的模式被许多人诟病,但飞漫软件执着发展 MiniGUI技术的现实意义不仅仅是为了单个企业的商业成功,而且也为了中国软件行业的发展、中国嵌入式行业的发展:
在中国软件产业缺乏人才、缺乏经验,而且知识产权保护乏力的情况下,开发一个系统软件的过程必定是艰难曲折的。但是,MiniGUI的成功表明,中国人完全有能力来自行开发完整的系统级软件以及配套的开发工具,并将其商业化,最终通过为客户带来价值而证明自己的价值。

在开发 MiniGUI 以及 mDolphin等软件的过程,飞漫软件积累了大量的研发管理经验,培养了大批软件开发和测试人才。这些人才不仅仅为飞漫软件的发展做出了重要贡献,也必将把飞漫软件的成功开发经验,尤其是研发管理经验带到其他企业,从而帮助整体提升中国嵌入式软件的开发水平和管理水平。

飞漫软件的成功,将吸引大批优秀人才进入到嵌入式软件的开发潮流中,相信中国必将涌现更多掌握核心技术、具有创新能力的嵌入式软件企业,从而带动中国嵌入式产业的长足发展。

五、以“十年磨一剑”的精神来重塑嵌入式行业
在中国短短的软件产业发展历史中,经过十年时间研发和推广的软件凤毛麟角。飞漫软件的实践表明,只有抱定“十年磨一剑”的长远目标,才能在基础薄弱、人才缺乏、融资环境恶劣的中国软件业整体环境下打造出一个个软件精品。嵌入式行业,尤其是电子消费类产品行业,所面临的竞争激烈,产品更新换代非常快,要想在这个红海中畅游,没有多年的研发积累是不可能的。

笔者呼吁嵌入式行业的从业者,从现在开始,加大研发投入,重视软件价值,以“十年磨一剑”的精神来重塑中国的嵌入式行业!

魏永明:“自主”操作系统——为什么及如何

作者:魏永明(飞漫软件CEO)

1 引言
近一个月是个多事之秋(2012年9月),IT 和互联网领域也不平静。阿里云操作系统受到谷歌的打压,华为任正非提出要开发自己的操作系统,中兴也宣布今年第四季度将发布自己的操作系统。一时间,微博上有关自主知识产权操作系统的讨论如火如荼。这样的讨论,就如同“水木清华”某些板面上的“月经贴”一样,每隔一段时间就要火一次。但大部分讨论其实讨论不到点子上,就如同“瞎子摸象”一般,大家基本上只是站在自己的立场,基于自己的经验在判断孰是孰非。这样的讨论效率低下,本人认为有必要写一篇科普性的文章,从政治、技术、工程、法律等几个方面给“自主”操作系统来一个比较清晰的定义,并尝试给出一些技术、工程等方面的建议。

1.1 作者的资格
为了说明本人有足够的资格来写这篇文章,给大家介绍一下本人的经历。本人码农出身,1993到1998年期间主要在微软平台上做程序开发,曾编写过 DOS、Win32、MFC 程序,期间涉及 C/C++ 语言,SQL 数据库、网站后台等。从 1998 年底开始专注于 Linux 和嵌入式系统。主要作品为大名鼎鼎的 MiniGUI。在创办飞漫软件的近十年时间里,作为企业创始人和研发负责人,组织研发团队持续开发 MiniGUI,开发了多个版本的嵌入式浏览器产品,也曾和美国公司合作,开发过类似 Android 这样的移动操作系统,还将 Android 运行在了 MeeGO 上(也就是国际上有点名气的 ACL,飞漫是主要开发者)。除了极其丰富的软件开发、管理经验之外,本人还编写过几本操作系统相关的书籍,不过比较老了,比较出名的是本人主持翻译的《Linux 设备驱动程序》第二版、第三版。有这些经历和相关经验做基础,我相信本文所述将是比较客观和完备的。希望本文对政策制定者、大型企业的决策者、自主操作系统的开发管理者,以及一般的码农们或多或少有一些帮助。

1.2 限制和定义
操作系统的类型很多,粗粗算起来,从小到大,有针对嵌入式系统的实时操作系统,比如 VxWorks、Nucleus 等;有现在大家熟知的针对移动终端的 Android、iOS、Windows Phone 等;有 Windows、Ubuntu Linux 等针对 PC 的操作系统;还有针对服务器的操作系统,比如 Windows NT 等。

从技术上讲,操作系统的概念可大可小。小的话,一个内核就可以称为一个操作系统,比如 Linux 内核、BSD 内核、Minix 内核等;大的话,则通常指的是整个软件平台,比如 Android、iOS、Windows Phone,有时还会将软件商店、开发社区等包含在内,从而外延到整个生态系统。

本文所指“操作系统”,以及大家近期讨论的操作系统,其实基本上被限制在移动终端领域当中,就是指能够和 Android、iOS、Windows Phone 等相提并论的操作系统,主要用于智能手机、平板电脑,而不是实时操作系统、操作系统内核或者服务器操作系统——准确讲,应该是指一个针对智能手机和/或平板电脑的软件平台以及对应的生态系统。不过,我们当前还是把它称为“操作系统(OS)”吧。

2 到底要不要“自主”操作系统
对此问题,不同的人有不同看法,但其实都很偏颇。码农,尤其是喜欢 Google 的码农,通常会说,Android 是完全开源的,没有必要重复造轮子;企业决策者或者政策制定者,则往往会认为必须有自主的操作系统。其实两者都有道理,但两者都没有看到事物的本质。

2.1 “自主”操作系统的不必要性
在谈“自主”操作系统的必要性之前,笔者先谈谈“自主”操作系统的不必要性。

在开源软件大行其道的今天,操作系统不再那么神秘,任何有足够财力的企业,依赖现有的开源软件,都可以比较容易地推出一个能够运行的操作系统。出于此观点,很多人认为有 Android 这样的开源操作系统,就没有必要再开发一个自己的操作系统了,到底谁拥有开源操作系统的知识产权,是无所谓的事情。

这个说法是有一定道理的。

从法律(指开源软件许可证)和技术上讲,就算 Google 不打算开源新的 Android 版本,不允许某些厂商使用 Android,我们一样可以在已经开源的 Android 之上继续发展自己的 Android 系统——只要遵循已经开源的 Android 的许可证约束即可,而 Android 系统主要使用的开源软件许可证有 GPL(Linux 内核)、LGPL(各种运行时函数库)、Apache(Dalvik 虚拟机及 Java 类库),其实是非常宽松的。

这个说法的不足之处在于,未考虑到可能的专利(软件相关的专利通常和实现无关,就是说,你重写一段代码,并不表示你可以规避对应的专利),以及是否有能力自行发展 Android 的问题。

前者非常要害。谷歌在开发 Android,尤其是 Dalvik 虚拟机以及 Java 类库的过程中,肯定积累了大量专利,而这些专利是凌驾于软件的著作权和许可证之上的。也就是说,如果你基于现有的 Android 派生了一个分支,要想将运行有这个 Android 派生版本的软件放到自己的手机里边销售,谷歌马上可以拿出专利大棒来限制你。当前,谷歌尚未拿出专利大棒来限制各种派生于 Android 的系统。拿阿里云 OS 和谷歌最近的争论当中来看,谷歌也只是说阿里云 OS 导致 Android 不兼容。但一旦有厂商真的使用了阿里云 OS,谷歌马上就会拿出专利大棒,这将毫无疑问。

至于有没有能力来自行发展 Android 的问题,在中国有大量码农基数的基础上,只要有源代码,就可以在短时间内组织团队自行发展 Android。

2.2 “自主”操作系统的必要性
强调需要“自主”操作系统的主要有两类人:政府中的政策制定者以及大型企业的决策者。

对政策制定者来讲,面向未来由中美两国主导的国际环境,作为两极世界中的中国,有没有自主的芯片、有没有自主的操作系统,关系到两个层面的东西,一个是国家安全,一个是面子。在这样的认识下,“核高基”的出现自然而然,其目的是支持国内企业发展核心电子器件、高端通用芯片及基础软件产品。我们暂且不谈核高基项目在实施过程中存在的制度性问题,它表明的国家是在战略上的一种布局,是一种国家意志,涉及到政治领域。

作为企业决策者,没有自主的操作系统,他将在很多方面受制于人。就拿阿里云和谷歌的争议事件来看,宏碁受到了来自谷歌的压力,然后就乖乖投降了。这里边有两个值得思考的地方:(1) 既然 Android 这么好,为什么宏碁还要和阿里 OS 合作?后者肯定没有 Android 成熟啊。(2) 为什么谷歌一施压,宏碁就放弃了和阿里 OS 的合作呢?显然,宏碁有动机选择另一个 OS 给自己的智能手机,可能的原因无外乎两种:

阿里给钱了或者宏碁不希望被谷歌控制;另外,宏碁又那么容易地被谷歌搞定,说明谷歌能带给宏碁的利益远远大于阿里。

另外联想到微软向 Android 厂商收取专利许可费的事情,像宏碁这样的厂商,肯定也会被微软勒索,也包括中兴、华为等国际化的 Android 手机厂商,无一例外。对企业决策者来讲,这很难受——给别人做嫁衣啊,有时候还两头受气!所以,小的厂商需要投靠大树来庇护自己(大多数乖乖就范于谷歌或微软),大的厂商就要考虑是不是开发一个“自主”的操作系统来抗衡了。

这样的思路下,华为、中兴等大的智能手机厂商,开发“自主”操作系统的动机非常强。

像阿里这样的公司,开发OS,其目的是要复制 Google 的商业模式,加上阿里 OS 又没有撇清和 Android 的关系,受到 Google 的打压就在情理之中了。

2.3 “自主”应强调在“有效知识产权保护下的自己主导”
根据上面的分析,看来我们还真的需要有“自主”的操作系统。但是,“自主”到底是自主什么呢?

在功能手机和实时嵌入式系统领域,我们不是没有“自主”的操作系统,比如 MTK 或者展讯的操作系统,以及诸如早期的 Hopen、道系统等。在通用操作系统领域,国家也长期支持了诸如麒麟操作系统、红旗 Linux、中标 Linux、新华 Linux 等多家本土操作系统厂商。但市场表明,国家支持的这些操作系统都将消亡或者正在消亡。

本人认为,国家支持下进行“自主”操作系统的开发有合理之处,毕竟开发操作系统是一件比较困难的事情。但是,这里边有一个重要的误区和制度设计上的错误,就是只强调了“自有知识产权”,而没有强调“自己主导”。

在强调“自由知识产权”的情况下,政府对受资助企业的“自主”操作系统进行考核时,大部分情况下考核的是企业有没有获得对应的知识产权,就是软件的著作权和/或对应的专利,而并没有考核能否主导一个产业链。就如同 Google 那样可以控制这个产业链一样,受资助的企业,能不能做到让别人用了你的操作系统,就没法不继续用?在这样的思路下,政府需要在更长的周期内,考核受资助企业的市场份额是否有扩大,是否建立了良好的生态系统,让使用者、开发者欲罢不能,而不是简单的著作权证书和专利数量,或者是否达到了一个给定的出货量(因为出货量是可以作假的)。

也就是说,我们应该重新定义“自主”这两个字,从“自有知识产权”向“有效知识产权保护下的自己主导”转移。

为什么这里强调“有效知识产权”呢?这是因为,在开源软件成为趋势的情况下,构建一个自己的操作系统,可以使用很多已有的开源软件,我们没有必要所有代码都自己编写,而且越底层的代码就越没有必要自己重写一遍。这如同一只桃子,好吃的是果肉,而不是果核。像内核、基础库、常用运行时函数库等等,都不必自己重新开发。而且这么做几乎没有任何潜在的法律问题,当然,前提是你要告诉大家你用了哪些开源软件,而且你也尊重了这些开源软件的许可证。这样下来,一个操作系统的软件著作权已经不再重要,重要的是相关的专利、自己独有的创新以及围绕操作系统建立起来的生态系统。

3 “自主”操作系统应该具备的特征
那么,“自主”操作系统应该张什么样?要回答这个问题,我们先看看假的“自主”操作系统张什么样。所谓假的“自主”操作系统,就是那些号称“自主”操作系统,但其实:

只是在已有的开源操作系统之上加了一层皮。比如各种基于 Android 的第三方 ROM,比如 MIUI、Flemy 等。这种操作系统仅仅在 UI/UE 上做了一些工作,就如同一个人换了一身衣服那样,实质上这个人不会因为换了一身衣服而从张三改叫成李四。

修改了已有开源操作系统的内部代码,做了一些优化或者去掉了别人的一些东西,添加了一些自己的内容。比如阿里 OS 就属于这种,或者哪些号称深度定制的 Android 系统也属此类。这种做法如同整容,的确动了些刀子,甚至改变了性别,但人还是那人,改了名字或性别也还是那人。

这么类比下来,读者应该就知道了,真的“自主”操作系统,必须要有自己的灵魂,只有这样,不管换什么衣服、是不是经过了整容,那人还是那人;通俗一点讲,只有换了脑袋的才能是一个全新的个体。

那么在操作系统当中,什么东西是灵魂?这个问题回答起来蛮难的。我们先看看哪些东西肯定不属于灵魂:

无法形成有效知识产权的软件组件,或者说,满世界有很多(开源的)实现的软件组件。比如内核、基础函数库、网络协议、图形库、浏览器引擎等等。这些东西可以看成是形成一个智能动物(比如“人”)的骨架或者躯体、甚至心脏,但远远算不上脑袋或者灵魂。这也是为什么笔者主张在“自主”操作系统中要尽量使用现有的成熟开源软件、而且不建议再行发明此类轮子的原因。
要知道哪些东西是灵魂,我们分析下 Google 在和阿里 OS 争论的过程中主要维护的是什么东西:

Google 的说法:阿里 OS 采用了 Android 的虚拟机和 Framework,但又不兼容 Android,破坏了 Android 的生态系统。这个说法可能还不是 Google 打压阿里 OS 的最关键原因,但起码说出了他们的担忧:阿里 OS 是想借 Android 打造自己的一个生态系统!另外,Google 对那些只换衣服的 Android 系统采取听之任之的态度,和他们一贯以来标榜的“只要兼容,我们欢迎”的态度一致——也就是说,这些系统没有从根本上动摇 Google 的生态系统。

所以,真正的“自主”操作系统的灵魂,就是那个背后的、无形的生态系统,一个看似开放但其实封闭的生态系统。一旦加入这个生态系统,你就很难下来——正所谓“上了贼船下不来”。

这就是我的回答:

一个真正“自主”的操作系统,必须建立自己的生态系统,一个开放的,但在某种程度上又封闭的生态系统。

操作系统生态系统?这名词大家说了很多年了,一个生态系统具体应该是什么样子?笔者从如下几个方面解释一下:

技术层面。操作系统必须通过某种技术将自己和其他的操作系统区隔开来。比如 Android 采用 Java 语言,但使用了不同于 Sun(现在是 Oracle) JDK 的 API;iOS 采用了 Object C 语言,为应用程序提供的接口和框架甚至有别于苹果自己的 Mac OS X;Windows Phone 采用了 C# 语言,在 .Net 框架下进行开发。为什么这些操作系统不使用 C/C++ 这类语言呢,C/C++ 尤其是 C 可是这些操作系统内核的编程语言啊!?这里有如下几个原因:
操作系统开发者不希望普通的应用程序通过使用比较低级的编程语言来控制系统或设备,毕竟操作系统是给智能手机、平板电脑这种消费类的电子设备使用的。
通过采用更加高级的语言来简化编程和开发人员的学习难度。
通过对看起来非常复杂的框架的持续演进,达到牵着开发者和厂商鼻子走的效果。
便于形成依附于某个操作系统的独有的开发者社区和文化。

法律层面。操作系统必须通过创建自己的有效知识产权体系来保护自己。前面已经说过,越底层的软件组件越没有市场价值(码农们可能不喜欢听这话,但现实就是这样的)。通过建立全新的、包裹在底层操作系统之上的框架、编程接口、编程语言等基础设施,操作系统开发商才有可能建立起有别于他人的有效的知识产权保护体系。也就是说,如果连框架、编程语言、编程接口等都抄袭他人(就算是开源的、许可证允许的),那永远也无法形成一个可以有效保护自己的知识产权体系。

市场层面。通过和上下游企业的合作,建立某种联盟或者许可、授权机制,让操作系统的用户(芯片厂商、手机厂商、平板厂商)能够从中获益。比如 Android 开放联盟,做的就是这个事情。

开发者社区。一个好的操作系统之生态系统,要充分照顾开发者的利益,具体有如下几点:

要有好的开发工具,便于开发者学习、开发和调试软件。
要有好的文档或者教程,帮助开发者迅速掌握相关开发技巧。
最重要的,要能够让开发者赚到钱。

看到这里,相信大家都会意识到:这也太难了吧!的确,这非常难,这也是为什么 Moblin、MeeGo、Bada、WebOS 等操作系统相继失败,而到目前,只有 iOS、Android、Windows Phone 这三种操作系统的原因。

但是,世上无难事只怕有心人。接下来我告诉你如何搭建一个真正的“自主”操作系统。

4 如何开发“自主”操作系统

4.1 开发“自主”操作系统的两种目的和策略

开发“自主”操作系统的主要目的有两种:一种是想再造一个类似 Android、iOS 的操作系统,并作为其竞争者;一种仅仅是为了在商务谈判和合作中获得一个比较好的筹码。当然,还有一种目的就是骗取政府的财政支持,对这类不良目的,不属本文讨论范围。

我们先猜度一下国内外这几年出现的一些“自主”操作系统,其目的是什么:

中国移动通过博思通讯开发的 OMS。本质上 OMS 是 Android 的一个派生系统。很明显,中国移动开发 OMS 的目的属于前一种。中国移动希望利用自己强大的市场地位来左右手机供应商的 OS 选择,并建立起类似苹果那样的全封闭的平台和生态系统。可惜的是,OMS 并没有取得预期效果,在来自联通、电信的强大市场压力下,中国移动不得不允许 TD 手机使用正统的 Android 系统;OMS 也正在被市场淡忘。这里有个比较有意思的现象,Google 从来没有公开质疑过 OMS 系统,阿里 OS 的做法和 OMS 类似,却遭到了打压。这里有两个原因,一个是中国移动的市场地位摆在那里(加上还是巨型国企),Google 不敢轻举妄动,另外一个是 OMS 采用的是 Android 早期版本,那时候 Android 的市场地位还没有这么强。

中国联通所谓的 UniPlus。可惜的是,UniPlus 似乎从来没有面过世,也许中国联通只是放了一个烟雾弹而已。要是真开发,目的自然应该和中国移动的 OMS 类似。

Firefox OS。这是 Mozilla 公司推出的纯粹基于 HTML5/CSS3/JavaScript 等网页前端开发技术推出的操作系统,和 HP 收购自 Palm 的 webOS 有类似的软件架构。HP 收购了 webOS 之后的半年,即宣告放弃 webOS,而 Mozilla 却希望通过类似技术的 Firefox OS 成为 Android 的竞争者。一会儿我们分析下为什么 Firefox OS 要比 webOS 有更强一些的生命力。

华为提出要开发的“自主”操作系统。作为一个智者,任正非不可能不知道一个真正“自主”的操作系统应该是什么样子的。华为就算再有钱,再有人才,短时间内也是搞不定一个“自主”操作系统的(如前所述,主要是建立对应的生态系统太难了)。这么说来,华为开发“自主”操作系统,其目的其实就是做一个备胎,以便在和 Android、Windows Phone 等合作时能够有一个可以讨价还价的砝码。也就是说,华为并不是真的要做“自主”的操作系统;或者这么说,支持团队去做,做成 Android 那样最好,做不成 Android 那样,如果真有一天打起架来可以凑合用也行。

阿里 OS。马云同志的野心很大,他做阿里 OS,就是要复制 Google 在移动互联网的商业模式,进而在移动互联网领域推广阿里体系的服务和内容。可惜的是,马云貌似不太懂技术,也没个明白人给他做参谋,结果被人害了,花了钱还被人捏住了七寸。最新的传言,说阿里 OS 要换将,继续再投个 2 亿搞。马云同志啊,光有钱是不行的,你身边还得有个把技术大牛帮你把关、出谋划策才行啊。

好,面对这两种开发“自主”操作系统的目的,应该有什么样的策略呢?其实策略很简单,不管你是真心还是假意,都应该按照本文第 3 章给出的“自主”操作系统之特征进行开发,除此之外,别无他法。任何期望找捷径的方法,都不可能获得成功。这里所说的找捷径的方法具体有:

给 Android 整容。如 OMS、阿里 OS。

忽略操作系统之生态系统的重要性,在 Linux 或其他开源操作系统内核、系统库等基础上包裹一个简单的框架而形成的操作系统。这种操作系统,其复杂度和 Linux 发行版相当,离本人定义的真正“自主”操作系统还差十万八千里。读者可能会问,这样的系统做备胎不是还行吗?为什么也得按照真做那样开发呢?你要知道的是,对手也不是傻子,人家看你的架势,就知道你不是真做——你起码得拉出真做的架势来,人家才能怕你啊!

顺便谈谈我对基于浏览器技术的 web 操作系统之看法。

理论上讲,浏览器可以做很多事情,甚至可以替代 PC 机上的通用操作系统。但是,最新的浏览器技术(HTML5/CSS3等),还存在一些技术上的问题。主要的问题有如下两个:

浏览器主要采用的 JavaScript 编程语言,本质上是一种难于管理(源代码保护、无法进行有效的软件架构设计、难于调试等等)的编程语言,同时内存消耗巨大,性能不佳。最新的说法是,Facebook 创始人直言全面采用 HTML5 的策略是个失误,正在向操作系统的原生应用转移。也就是说,JavaScript 语言难以承载一个良性发展的生态系统。
因为许多原因(主要是利益和政治因素),HTML5 相关的标准有分裂的迹象,同时进展缓慢。

HTML5 技术作为原生应用的一种补充,可以起到很好的作用,但是,如果要想在浏览器技术上建立一个真正可以和 Android 等竞争的操作系统,恐怕还需要很长的时间(技术上必须有突破)。要不然,Google 现在主推的应该是 ChromeOS,而不是 Android。

现在回答刚才提到的问题:“为什么 FirefoxOS 可以比 webOS 的生命力更加长久些呢?”主要的原因是,FirefoxOS 是开源的,有比较强大的企业在主导其发展,作为一个脱胎于开源基金会的企业(Mozilla公司),也能获得合作伙伴的一些好感;相反,因为 webOS 是封闭,HP 又没有能力像苹果那样打造一个完全封闭的平台和生态系统,所以最终的命运是被人抛弃了。虽然后来 webOS 也走上了开源的道路,但大势已去,HP 不亲自带头搞,光靠开源社区是搞不成的。

4.2 技术层面上的考虑

假定你是一名“自主”操作系统项目的技术管理者,你第一步要考虑的问题是什么?许多人的回答可能是:先选操作系统内核、基础库什么的。其实错了,第一步要考虑的应该是你打算选择什么编程语言作为原生应用的编程语言。

世界上的编程语言有很多种,有些语言贴近机器,比如汇编语言、C语言,有些语言贴近人,比如 Basic、Java,还有些语言用于特定领域,比如网页服务器端使用的 PHP,有些适合做不同软件之间的粘合剂,比如 Perl、Python。本文第 3 章已经解释了编程语言以及围绕编程语言形成的运行环境、框架是将操作系统区隔于其他操作系统的主要技术特征。因此,我们必须慎重选择一种编程语言。而且一旦选定了一种编程语言,“自主”操作系统在开发者看来长什么样,其实就基本上定了。

选择编程语言要考虑如下因素:

这种编程语言是否易于学习和掌握?是否有庞大的开发者在使用它?
这种编程语言是否具有高级语言的基本特征,比如,支持面向对象编程?
这种编程语言是否是编译执行的?
这种编程语言是否利于保护开发者的知识产权?
这种编程语言是否有完整的工具链支持?
这种编程语言是否有集成开发环境的支持?
这种编程语言是否易于保护整个操作系统不会被恶意代码轻易破坏?
如此等等。

其实很多读者看到这里,都会想到 Java 语言。是的,Java 语言或其派生语言如 C# 是构架“自主”操作系统的最佳编程语言。可惜,已经被 Android 和 Windows Phone 给捷足先登了。

如此一来,你可以考虑重新设计一门类似 Java 的语言,也可以通过其他手段,让你使用 Java 语言构建的操作系统有别于其他操作系统。比如,构建自己的虚拟机,如 Android 使用的 Dalvik 那样(Dalvik 和 Oracle 的 JDK 标准虚拟机有很大不同,从而让 Oracle 还挺难告赢 Google 的);你也可以用 Dalvik,但让类库、运行环境和 Android 不同(这样做的法律风险要大一些)。总之,你需要有自己的创新,全部抄袭是不行的。

确定了编程语言,接下来的工作其实就比较直接了,从上而下设计就是了。主要有:

定义和实现提供给原生应用程序的基础 API 和/或虚拟机。
在应用程序基础 API、标准 C/C++ 函数库和相关组件(通常都是开源软件)的基础上构建操作系统的运行环境和框架。主要涉及系统服务、模块之间的通讯机制,包括图形界面、浏览器引擎、OpenGL ES 支持接口等等。
同时选择操作系统内核,通常也就是 Linux,要与众不同,用 BSD 也行。
搞定集成开发环境和模拟器,让开发者可以在 PC 机上为你的操作系统开发应用程序。
让你的操作系统运行在真实硬件上,为开发者提供应用样例和文档。
持续迭代,让你的“自主”操作系统不停往前发展。

上面的第一点和第二点,是“自主”操作系统有别于其他操作系统,且支撑你可以和其他人竞争的关键点。往下的东西都不是构成“自主”操作系统真正竞争力的东西。

这么看来,其实也挺简单的。不是吗?貌似有钱、有个把技术上的明白人就能做到。技术上没问题了,市场、法律等方面的事情,请专业人员帮忙,中国这类人才还是蛮多的,缺的,其实还是技术人员以及懂系统工程和软件开发的管理人员。

4.3 快速搭建一个“自主”操作系统

这里给大家介绍笔者早先和美国一家公司合作,尝试搭建的一个操作系统,其实在当年这些东西的基础上,搭建出来一个有别于 Android 的开源“自主”操作系统还是非常快的。

这个系统使用了 Linux 内核和标准的 C/C++ 函数库,以及一些和 Android 体系结构类似的 C/C++ 运行库,使用了笔者公司的开源软件 MiniGUI、WebKit 浏览器核心引擎等等。基础的东西就这些。之上是开源的 Kaffe JVM(后来改成了 Cacao JVM),和符合 J2SE 规范的类库实现,再往上就是运行环境和框架了。见下图:

mpeer.png

可惜的是,真正具有核心价值的运行环境和框架,是美国合作方自己开发的,我手里没有源代码。相信读者也能明白,美国合作方掌握的才是精华。

如果要在这套系统基础之上快速开发一个“自主”的操作系统,我们需要:

重新定义类库,也就是基础 API,让我们的系统从灵魂上有别于其他系统。必要的话,优化或替代开源的虚拟机(淘宝最近开源了一个 JDK 虚拟机,不过是针对 J2EE 的)。
全新设计和实现适合于智能手机的运行环境、框架。
全新设计基本的智能手机应用软件。
开发模拟器,并集成到 Eclipse 集成开发环境中。
还有,这个系统是 2006 年开发的,我们还需要将底层的内核、基础函数库等更新到比较新的版本。
要做的工作还是蛮多的,但这个系统在 2007 年的时候,就已经可以运行在主频在200M Hz 左右的手机上了。

当然,这个系统离本人定义的真正“自主”的操作系统还有很大的距离。但是,起码技术上的方向是基本正确的,要知道,这个系统几乎是和 Android 同时发起的。后来在 2007 年,Google 宣布开源 Android 后,美国合作方敏锐感觉到了 Android 将是未来的趋势,就直接转向了 Android 平台,项目也就终止了。

5 给相关人员的建议

5.1 给政策制定者

这里所说“政策制定者”主要指的是“核高基”等政府资助项目的决策人。其实前面已经说过了,这里重申一下:

政府需要在更长的周期内(至少五年),考核受资助企业的市场份额是否有扩大,是否建立了良好的生态系统,让使用者、开发者欲罢不能,而不是简单的著作权证书和专利数量,或者是否达到了一个给定的出货量(因为出货量是可以作假的)。也就是说,我们应该重新定义“自主”这两个字,从“自有知识产权”向“有效知识产权保护下的自己主导”转移;在知识产权方面,要强调有效专利数量,而不是著作权;甚至应该要求受资助企业按某种许可证条款开放源代码。

政策制定者甚至可以参照本文 3 章给出的“自主”操作系统之定义,将整个“自主”操作系统的研发和推广分为三个部分:

科研类,两到三年为周期,以研究新的编程语言及其相关设施(如虚拟机及其优化技术)为主。
工程类,两到三年为周期,围绕指定的编程语言发展外围工具链(编译器、调试器)、开发工具、运行环境、框架等。
法律类,半年到一年为周期,研究和分析采纳已有编程语言面临的知识产权风险,如何规避等等。

政策制定者切忌急功近利,要按照客观规律办事,将科研类的课题交给研究机构,将工程类以及市场推广等方面的课题交给企业,将法律类的课题交给大专院校。只有这样,才能首先让方法正确,方法上正确,加上合理的考核制度,才能让钱产生真正的效益。

在花钱方面,在一盘大棋下的统一部署下,初期让多一些的企业或机构参与,一年一验收,逐步淘汰那些不合格的,最后剩下来一、两个企业就好。十亿美金,外加企业自筹部分,我看基本够了。

5.2 给大型企业决策者

有意开发“自主”操作系统的大型企业决策者首先要明白,开发“自主”操作系统是一个长期、艰巨的系统工程。甚至,你需要准备一大笔钱来和已有的巨头打官司(微软赔付给 Sun几十亿美金之后,才让自己的 C# 和 .Net 平台成为“干净”的语言和平台)。

另外,如前所述,不管是真心还是假意,都要拿出十足的架势来真做,而且,对内、对外都要强调这点。要知道,你期望得100分,下属大多数情况下只能给你 80 分;你期望得 1000 分,下属也许就可以给你500分。这样才能超出决策者自己的预期,才能收到更好的效果。

5.3 给“自主”操作系统的技术负责人

这事儿如果恰好让你负责,那简直是,怎么说呢,是个“扬名立万”的机会啊!你要知道的是,这事儿和制造“两弹一星”差不多。

首先你要掂量掂量,你有没有这个本事。所谓“没有金刚钻,不揽瓷器活”,说的就是这个道理。有兴趣的也别来找我,我做点小项目可以,真要我负责,我没这个本事。

另外一方面,你要是违背知识分子的良知,帮助一些不良人员骗取国家的资助款项,就更不应该了。这可是要被人戳脊梁骨的;有没有钱拿永远是小事,昧了自己的良心可是大事。

5.4 工程上的建议

在具体的研发实施过程当中,开发负责人必须特别注意工程方面的问题:

先做什么、后做什么,或者那些可以并行做。
不同的软件模块,应采取不同的软件开发管理模型。API 设计、框架等的开发,适合采用瀑布法模型;应用软件或者小型模块的开发,适合采用敏捷开发模型。但整个系统,应要不停迭代,所以版本控制非常重要。
特别要注意代码的质量控制以及文档的全面、完备、简洁和逻辑性。
这方面,如果需要帮助,本人可尽微薄之力。

开源先驱魏永明:开源可以给你的(图灵访谈)

盼盼姐 发表于 2012-07-27 10:47

图灵访谈之三十(5)——专访魏永明

2012年7月14日,图灵社区对来参加“我们的开源项目”的几位朋友进行了一系列访谈。他们中有十年前就涉足国内开源领域的开拓者,有作为Apache Member的技术精英,有在国内开源社区玩的不亦乐乎的极客,也有因为毕业设计而和开源结缘的毕业生。他们有着不同的梦想,不同的问题,却都有着相同的特点:对未来充满希望。从他们的身上,我们可以体会到这些朋友的苦楚和快乐。也通过这些截然不同的声音,让我们尝试着阅读中国开源社区的现状。

魏永明,毕业于清华大学精密仪器系,获工学学士、硕士学位。由魏永明主持的 MiniGUI 项目,是国内最具代表性的几大自由软件项目之一,目前已成为支持多种嵌入式操作系统的图形中间件产品。他在 2002 年创办了北京飞漫软件技术有限公司,围绕 MiniGUI 的商业化进行了大胆尝试,并从 2011 年起,开始转型到移动互联网领域,发布了以领航桌面为代表的多款 Android 应用软件。魏永明著有《Linux 实用教程》、《学用 Linux 与 Windows NT》和《嵌入式软件开发及C语言实现/MiniGUI剖析》,并主持翻译了《Red Hat Linux 奥秘》、《Linux 编程宝典》、《Linux 设备驱动程序》(第二版、第三版)等一批优秀的 Linux 技术著作。

联系他:@飞漫魏永明(weibo.com)

图灵社区:你的自由软件职业生涯是如何开始的?

最开始的是在学校,学校里面刚好有一个项目,当时就想利用所学的知识做出一个工具或者比较基础的软件。十多年前开源在国内也是很新鲜的概念。当时没有想过拿这些东西来换钱,凭的完全都是兴趣。 但是对于很多人来说兴趣只是一方面,如果项目通过开源可以获得一些用户,大家也希望用它来创业,或是做一些商业方面的考量。这些东西的背后可能都由名和利作为最根本的驱动的。

图灵社区:但是与你所说的名与利相反,我感觉很多人在做开源项目的时候都很自得其乐,极客味十足。

我们当时做开源项目的时候其实也是受了Stallman, Linus这样的人的影响。虽然他们的个人财富并不很丰富,但是他们为世界留下了丰盛的精神财富。比如说Stallman,他做的事情都不是普通人可以做出来的,他这样的人在中国有可能被认为精神有问题,但是美国这样的人太多了。

图灵社区:到目前为止你对软件行业最大的成就和贡献是什么?你未来希望可以完成什么?

MiniGUI这个软件以开源的形式进入Linux和嵌入式终端产品,很多人会看MiniGUI的代码来学习,想知道这样的软件是怎样设计出来的。2000年左右开发这个软件的时候,我们做了很多推广Linux的活动,比如说在 IBM、Intel 等公司的支持下做了很多推广开源思想的活动。这款软件从一个开源小项目到最后成为一个成熟的产品,我作为这个软件的创始人和主创人员还是很自豪的。

MiniGUI作为一个很成熟的产品,它的历史使命也基本完成了。这么多年下来,它在商业上不能说是大获成功,但可以说是部分成功,因为毕竟也是赚到了一些钱。而且我们打算拿这些钱用在公司向移动互联网的转型上。目前在移动方面还是纯投入状态,商业模式也还在探索当中。接下来我们要做的事可能和开源关系不是那么大了,但是还是会利用开源来推广我们的一些产品。也可以说我们会在商业运作当中利用开源的方法来做事。开源现在已经变成我们的途径,而非目的。

我从十多年前的极客,变成了今天的商务人员。我希望今后可以在移动互联网这个大方向上面再创造出一片天地,希望可以建立一个平台,集合一些高水平的技术人员,开发出一些好的产品。

图灵社区:企业的转型有什么原因吗?

我们很多用户的终端就是手机,但是是功能手机。而功能手机已经明显在市场上让位于智能手机了。所以既然我们对这个市场是有一定了解的,也就自然地转移到这个市场上来,开始转战移动互联网了。所以这场转型并非心血来潮,而是市场引导我们走到了这里。我们接下来的MiniGUI和开源软件不会有太多技术上的关联,但是在商业上还是有关联的,这个产品还是会支撑我们走过转型期。但是可以确定的是,在做移动互联网的时候我们也会借用开源社区的方法,毕竟这是我们最熟悉的。

图灵社区:那你现在仍然混迹于开源社区吗?

虽然我看起来像个商人(笑),但我仍然混迹于开源社区。只是做的事情没有以前那么多了,比如说我们之前的产品和版本还是开源的,同时也积极参加开源社区组织的活动。

图灵社区:你认为中国开源环境怎么样?

现在的环境可以说比我当年要好多了。我们十年前做开源软件的时候,国内基本是没有什么著名的开源项目,但是现在这样的项目已经有很多了,问题是这些软件能不能坚持下来。很多软件刚问世的时候都是很原型的,要经过一轮轮的磨练才有可能变得比较成熟。要从雏形变成产品的路程是很漫长的,大浪淘沙能够坚持下来的是很少的。我认为这里面需要一个引导,需要一个开源社区底层的松散的引导团队。这个团队里需要的人既包括技术方面的,也包括商业方面的,甚至是资金方面的。这样的团队可以引导开源软件的开发者,告诉他们这个是不是有意义,用什么样的许可证比较合适,怎么组织,怎么发展。这样做的工作才会有基,而不是今天做一个轮子,明天再做一个轮子,这是一种浪费。

图灵社区:但是似乎松散就应该是开源社区的一般形式。

当然,有些东西看起来很乱,但其实是有一套自组织系统的。混乱没有关系,它自有一套淘汰机制。很多项目做了一半没有人关注,也没有人用,他也就不做了。这是没有问题的。但是问题在于大家的激情在这过程中被消磨了。

图灵社区:你对国内开源社区的发展有什么建议?

应该向国外的开源社区学习,比如说Apache,有一个基金会。国内的话基金会可能不那么容易,但是国外的一些模式是可以借鉴的。现在的发展条件已经基本成熟,最大的困难可能就是如何注册一个NGO,但是也可以只注册一个公司,通过财务公开,捐款人可以参与决策,就像董事会一样。我认为这些东西不能靠商业公司来做,而是需要一个非营利机构。商业公司的参与方式可以通过赞助,并在项目里安排人手来支援开源社区。国内的互联网企业完全有能力有意愿来做这些事。现在愿意掏钱的人有了,但是问题在于如何形成一个机制,让这些东西变得公正透明。最差的情况就是有好的组织起了好头,但是有人看到了这里的利润,然后以此牟利。

图灵社区:对开源软件有兴趣的人,你有什么要说的吗?

趁着年轻,30岁之前的人大可以来尝试一下,十分欢迎。但是如果已经成家立业了,快40的人可能需要谨慎一点了(笑)。做开源软件未必能收到现实的利益,但是像我刚才所说的,是有机会获得一些名望的。以我为例我98年开始做,99年发布第一个版本,2000年的时候就有很多人来找我,希望我去为他们工作,很多人也会愿意提供高薪给我。这个时候,你是否还想继续扑在开源项目上就是个人选择的问题了。但是前提是你要有这个能力,可以做出一个好的软件。所以我说,人在二十五六岁的时候,还在寻找人生的方向,作为一个技术出身的人来说,开源软件是个非常好的介入点。你通过天分和努力很快就会获得别人的关注,接下来的人生就会有很多机会。可能很好的公司甚至国外的公司会邀请你为他们工作,也有可能会有人想收购你的技术,或者从此走上创业之路。

欢迎关注我的其它发布渠道